x11: Make gdk_surface_get_position() return relative position
authorJonas Ådahl <jadahl@gmail.com>
Sat, 15 Feb 2020 23:28:01 +0000 (00:28 +0100)
committerJonas Ådahl <jadahl@gmail.com>
Wed, 19 Feb 2020 08:47:18 +0000 (09:47 +0100)
The returned position should be relative to the parent surface, but
GdkSurface::x,y were only managed properly for O-R windows. This makes
it correct for regular windows too.

gdk/x11/gdkdisplay-x11.c

index 7c143b52ff8471a08764d5444e93b2340f3029e0..1440eab426417521f60ffef040fcc2480b3a3c03 100644 (file)
@@ -994,11 +994,21 @@ gdk_x11_display_translate_event (GdkEventTranslator *translator,
            }
          if (!is_substructure)
            {
-              if (surface->x != event->configure.x ||
-                  surface->y != event->configure.y)
+              int new_abs_x, new_abs_y;
+
+              new_abs_x = event->configure.x;
+              new_abs_y = event->configure.y;
+
+              surface_impl->abs_x = new_abs_x;
+              surface_impl->abs_y = new_abs_y;
+
+              if (surface->parent)
                 {
-                  surface->x = event->configure.x;
-                  surface->y = event->configure.y;
+                  GdkX11Surface *parent_impl =
+                    GDK_X11_SURFACE (surface->parent);
+
+                  surface->x = new_abs_x - parent_impl->abs_x;
+                  surface->y = new_abs_y - parent_impl->abs_y;
                 }
 
               if (surface_impl->unscaled_width != xevent->xconfigure.width ||